package com.itheima.d09_threadpool;

import java.util.concurrent.*;

/**
 * 目标：掌握线程池的创建方式
 *      使用线程池ExecutorService接口实现类，ThreadPoolExecutor
 */
public class Test {

    public static void main(String[] args) {
        ExecutorService pool = new ThreadPoolExecutor(
                3, //核心线程数（餐馆正式工数量）
                5, //最大线程数（餐馆员工员工数量）
                10,//临时线程最大空闲时间（餐馆临时工最长没活时间）
                TimeUnit.SECONDS, //临时线程最大空闲时间单位（餐馆临时工最长没活时间单位）
                new ArrayBlockingQueue<>(4) , //任务队列，没有来得及处理的任务进队等待处理（餐馆外的候客区，等待位置）
                Executors.defaultThreadFactory(), //线程工厂，创建线程（餐馆的HR，负责管理员工）
                new ThreadPoolExecutor.AbortPolicy() //拒绝策略，任务队列已满，且没有空闲线程，无法处理任务，拒绝处理（餐馆饱和，拒绝顾客）
        );

        //注意事项1：什么时候创建临时线程？
        //  核心线程都在忙，任务队列也满了，再来任务，则创建临时线程处理

        //注意事项2：什么时候拒绝？
        //  核心线程都在忙，任务队列也满了，临时工都在忙，再来任务，使用拒绝策略进行处理
    }
}
